1. Technical Field
The present invention relates generally to caching information in a data processing system and, in particular, to a system and method for efficiently managing cacheable sets of objects having lifetime specifications.
2. Description of Related Art
Caching is a technique that is commonly employed to improve performance in many computer systems. Caching involves storing an entity that is frequently requested and/or expensive to fetch or generate in a storage area known as a cache. For example, in an object-oriented environment, caching an object can minimize the cost for fetching or materializing an object since subsequent requests can be satisfied from the cache, a process which incurs significantly less overhead, thus resulting in improved performance overall. In some cases, the entities being cached comprise sets of other entities. For example, a cached set may contain the set of all objects which satisfy a query. In object-oriented and other database applications, queries are often issued to databases. These can be expensive to make in terms of, e.g., computation time and memory. Therefore, caching techniques may be utilized for reducing the overhead associated with issuing queries by caching query results such that the query need only be issued once. Subsequent requests for the same query would be able to access the corresponding query results from the cache.
A key problem associated with caching objects and sets of objects is that of preventing the cache from supplying stale data to its clients. Cached data becomes stale whenever actual values have changed but cached copies of these values have not been updated to reflect the changes.
Accordingly, there is a need for a system and method for anticipating and reconciling changes that would cause a cache to become stale in order to alleviate the problem of obsolete cached data at client request time.
The present invention is generally directed to a system and method for efficiently caching sets of objects in a data processing application. In particular, the present invention is directed to a system and method for providing time-based management of a cache in an object-oriented computing environment, wherein a time-based cache manager maintains and updates one or more sets of objects stored in the cache.
In one aspect of the present invention, objects are assigned start_times and/or end_times. In addition, an object may have multiple start_times and/or end_times. Furthermore, collections (sets of objects) are designated by assigning first_times and last_times. For a given collection, objects having start_times and/or end_times that meet predefined criteria are selected as members of the collection. A collection may be stored in a cache or other storage medium.
In another aspect of the present invention, a given collection forms a xe2x80x9csupersetxe2x80x9d of objects from which queries are satisfied without having to re-fetch or re-materialize such objects. A time-based cache manager determines, from the xe2x80x9csupersetxe2x80x9d of objects, a xe2x80x9csubsetxe2x80x9d of objects that satisfies the query at the time the request is made. The subset of objects is stored in a cache.
In yet another aspect of the invention, the time-based cache manager comprises a mechanism to xe2x80x9cupdatexe2x80x9d the cache. In one embodiment, the cache manager will determine an update_time for a given cached subset of objects based, in part, on start_times and end_times of objects that are members of a cached subset. Whenever a request for the query is received before the last_time of the collection, the cache manager determines whether the cached subset of objects is still valid by checking its update_time against the current_time. If the cached subset of objects has expired (e.g., the current_time is greater than the update_time) the cache manager automatically updates the cached subset with objects in the collection (without having to contact the server) by removing objects that have expired and adding objects having elapsed start_times and non-elapsed end_times, and then assigning a new update_time for the cached subset.
In another aspect of the present invention, if the cache manager determines that a cached subset of objects has expired (e.g., the current_time is greater than the update_time) and that the current_time is either less than the first_time or greater than the last_time of the corresponding collection (superset), the cache manager will query a server to update the collection of objects and update the cached subset of objects from the updated collection.